use std::sync::Arc;
use std::sync::Mutex;

/// 常量
///
/// 作者: noear
/// 自 2.0 起
pub mod constants {
    use std::sync::{Arc, Mutex};
    use bytes::Bytes;

    /// 默认流id（占位）
    pub const DEF_SID: &str = "";
    /// 默认事件（占位）
    pub const DEF_EVENT: &str = "";
    /// 默认元信息字符串（占位）
    pub const DEF_META_STRING: &str = "";
    /// 默认数据（占位）
    pub static DEF_DATA: Lazy<Arc<Mutex<Bytes>>> = Lazy::new(|| Arc::new(Mutex::new(Bytes::new())));
    /// 默认端口
    pub const DEF_PORT: i32 = 8602;

    /// 流ID长度最大限制
    pub const MAX_SIZE_SID: usize = 64;
    /// 事件长度最大限制
    pub const MAX_SIZE_EVENT: usize = 512;
    /// 元信息串长度最大限制
    pub const MAX_SIZE_META_STRING: usize = 4096;
    /// 数据长度最大限制（也是分片长度最大限制）
    pub const MAX_SIZE_DATA: usize = 1024 * 1024 * 16; // 16m
    /// 帧长度最大限制
    pub const MAX_SIZE_FRAME: usize = 1024 * 1024 * 17; // 17m

    /// 分片长度最小限制
    pub const MIN_FRAGMENT_SIZE: usize = 1024; // 1k

    /// 零需求
    pub const DEMANDS_ZERO: i32 = 0;

    /// 单需求
    pub const DEMANDS_SINGLE: i32 = 1;

    /// 多需求
    pub const DEMANDS_MULTIPLE: i32 = 2;

    /// 因协议关闭开始（安全关闭）
    pub const CLOSE1000_PROTOCOL_CLOSE_STARTING: i32 = 1000;
    /// 因协议指令关闭
    pub const CLOSE1001_PROTOCOL_CLOSE: i32 = 1001;
    /// 因协议非法关闭
    pub const CLOSE1002_PROTOCOL_ILLEGAL: i32 = 1002;

    /// 因异常关闭
    pub const CLOSE2001_ERROR: i32 = 2001;
    /// 因重连关闭
    pub const CLOSE2002_RECONNECT: i32 = 2002;
    /// 因连接断开
    pub const CLOSE2003_DISCONNECTION: i32 = 2003;
    /// 因打开失败关闭
    pub const CLOSE2008_OPEN_FAIL: i32 = 2008;
    /// 因用户主动关闭（不可再重连）
    pub const CLOSE2009_USER: i32 = 2009;

    /// 因压力告警
    pub const ALARM3001_PRESSURE: i32 = 3001;
}
